PrivateLinkがリリースし新たにEC2, Systems Manager, ELB, Kinesis, Service CatalogがVPCエンドポイントに対応しました
ウィスキー、シガー、パイプをこよなく愛する大栗です。
VPCエンドポイントはAWSへのAPIアクセスがインターネットに出ずに行える機能ですが、先程EC2、ELB、Kinesis、Service Catalog、Systems Managerが新たに対応したのでまとめてみます。
- New – AWS PrivateLink for AWS Services: Kinesis, Service Catalog, EC2 Systems Manager, Amazon EC2 APIs, and ELB APIs in your VPC
- Introducing AWS PrivateLink for AWS Services
VPCエンドポイントのアップデート
VPCエンドポイントに追加されたサービス
VPCエンドポイントに対応するサービスは、今回のアップデートで以下のようになりました。Key Management Service(KMS)やCloudwatchももうすぐ対応するそうです。対応しているリージョンは中国(北京)を除くリージョンで使用できます。
- S3
- com.amazonaws.ap-northeast-1.s3 : Gateway
- DynamoDB
- com.amazonaws.ap-northeast-1.dynamodb : Gateway
- EC2 <- New!
- com.amazonaws.ap-northeast-1.ec2 : Interface
- Systems Manager <- New!
- com.amazonaws.ap-northeast-1.ec2messages : Interface
- com.amazonaws.ap-northeast-1.ssm : Interface
- ELB <- New!
- com.amazonaws.ap-northeast-1.elasticloadbalancing : Interface
- Kinesis Stream <- New!
- com.amazonaws.ap-northeast-1.kinesis-streams : Interface
- Service Catalog <- New!
- com.amazonaws.ap-northeast-1.servicecatalog : Interface
- KMS <- Coming soon!
- CloudWatch <- Coming soon!
料金
料金は、AZごとの1時間あたりの料金と1GBの処理ごとの料金で決まります。
リージョン | AZごとのVPCエンドポイントの料金 ($/時) | 1GBのデータ処理あたりの料金 ($) |
---|---|---|
米国東部 (バージニア北部) | 0.01 | 0.01 |
米国東部 (オハイオ) | 0.01 | 0.01 |
米国西部 (オレゴン) | 0.01 | 0.01 |
米国西部 (北カリフォルニア) | 0.011 | 0.01 |
カナダ (中部) | 0.011 | 0.01 |
EU (アイルランド) | 0.011 | 0.01 |
EU (ロンドン) | 0.011 | 0.01 |
EU (フランクフルト) | 0.012 | 0.01 |
アジアパシフィック (シンガポール) | 0.013 | 0.01 |
アジアパシフィック (東京) | 0.014 | 0.01 |
アジアパシフィック (ソウル) | 0.013 | 0.01 |
アジアパシフィック (シドニー) | 0.013 | 0.01 |
アジアパシフィック (ムンバイ) | 0.013 | 0.01 |
南米 (サンパウロ) | 0.021 | 0.01 |
VPCエンドポイントの方式
ゲートウェイVPCエンドポイント(既存方式)
VPCエンドポイントは、今までS3とDynamoDBが対応していました。仕組みは下図のようにVPCのルートテーブルを書き換えてインターネットゲートウェイでなくVPCエンドポイントのゲートウェイ経由でAWSのAPIエンドポイントへアクセスしていました。今回この方式はゲートウェイVPCエンドポイントと呼ばれるようになりました。ゲートウェイVPCエンドポイントではAWSのAPIへはパブリックIPへ向いており、アクセス制御はゲートウェイのアクセスポリシーで行います。
インターフェイスVPCエンドポイント(新方式)
今回追加されたものは、下図のようにサービスのエンドポイントとENIをPrivateLinkと呼ばれるものでリンクされます。DNSを使ってENIのプライベートIPに<サービス名>.<リージョン>.amazonaws.com
のようなAレコードが設定されます。この方式をインターフェイスVPCエンドポイントと呼びます。インターフェイスVPCエンドポイントではENIに対してアクセスするため、アクセス制御はセキュリティグループで行います。
試してみる
VPCコンソールでメニューのエンドポイントからCreate Endpoint
をクリックします。
8種類のサービスが並びます。ここではSystems Managerを利用するためcom.amazonaws.ap-northeast-1.ssm
を選択します。
VPCエンドポイントを設定するVPCを選択して、ENIを配置するサブネットを選択します。APIへのアクセスで通常のエンドポイント名を使用するためEnable for this endpoint
にチェックを入れます。ENIに設定するセキュリティグループも選択します。設定をしたらCreate endpoint
をクリックします。
なお、通常のエンドポイント名を利用する(Enable for this endpoint
をチェックする)ためにはVPCの設定でDNS 解決
とDNS ホスト名
を有効にしなければなりませんのでご注意下さい。
しばらく経つとStatusがavailable
になります。DNS Names
を見ると、通常のエンドポイントであるssm.ap-northeast-1.amazonaws.com
以外に、オリジナルのDNS名である<エンドポイントID>-XXXXXXXX.ssm.<リージョン>.vpce.amazonaws.com
や、各AZに対する<エンドポイントID>-XXXXXXXX-.ssm.ap-northeast-1.vpce.amazonaws.com
もあります
配置したVPCのEC2にログインして確認してみます。ここではAmazon Linux 2017.09.1を使用しています。
Systems ManagerのエンドポイントのIPアドレスをdigコマンドで確認してみます。すると10.10.17.78
と10.10.16.175
となりプライベートIPに向いていることがわかります。
$ dig ssm.ap-northeast-1.amazonaws.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> ssm.ap-northeast-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65081 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ssm.ap-northeast-1.amazonaws.com. IN A ;; ANSWER SECTION: ssm.ap-northeast-1.amazonaws.com. 60 IN A 10.10.17.78 ssm.ap-northeast-1.amazonaws.com. 60 IN A 10.10.16.175 ;; Query time: 3 msec ;; SERVER: 10.10.0.2#53(10.10.0.2) ;; WHEN: Wed Nov 8 22:52:49 2017 ;; MSG SIZE rcvd: 82
Systems Managerを使用してみます。普通に利用できます。
$ aws ssm describe-instance-information --region ap-northeast-1 { "InstanceInformationList": [ { "IsLatestVersion": false, "PingStatus": "Online", "InstanceId": "i-1a2b3c4d5e6f7g8h9", "AgentVersion": "2.1.4.0", "PlatformVersion": "2017.09", "PlatformName": "Amazon Linux AMI", "PlatformType": "Linux", "LastPingDateTime": 1510182372.31 } ] }
次にインターフェイスVPCエンドポイントのセキュリティグループでEC2からのアクセスを拒否してから、もう一度実行してみます。10分ほど待ってエラーが発生します。
$ aws ssm describe-instance-information --region ap-northeast-1 HTTPSConnectionPool(host='ssm.ap-northeast-1.amazonaws.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<botocore.awsrequest.AWSHTTPSConnection object at 0x7f888f15b490>, 'Connection to ssm.ap-northeast-1.amazonaws.com timed out. (connect timeout=60)'))
さいごに
今回の対応でVPCエンドポイントに対応したサービスが大幅に増加しました。さらにもうすぐCloudWatchとKMSも対応される予定です。今までとは異なるインターフェイスVPCエンドポイントによってアクセス制御が異なるので、設定方法を理解して使用しましょう。